package nio;

import org.junit.jupiter.api.Test;

import java.nio.ByteBuffer;

/**
 * \* Created with IntelliJ IDEA.
 * \* User: 康大
 * \* Date: 2019/4/29
 * \* Time: 11:18
 * \* To change this template use File | Settings | File Templates.
 * \* Description:
 * \
 * allocate() : 获取缓冲区（Boolean除外）
 * put() : 存入数据到缓冲区
 * get() : 获取缓冲区的数据
 * flip() : 读数据模式
 * rewind() : 可重复读
 * clear() : 清空缓冲区，但是缓冲区中数据依然存在，处于“被遗忘”状态
 * reset() : 将position恢复到mark的位置
 * remaining() : position 到 limit 剩余的数据长度
 * hasRemaining() : 判断是否还有可操作的数据
 * isDirect() : 判断是否为直接缓冲区
 * 四大核心属性：
 * capacity : 容量，表示缓冲区中最大存储数据的容量。一旦声明不能修改。
 * limit : 界限，表示缓冲区中可以操作数据的大小。（limit后数据不能进行读写）
 * position : 位置，表示缓冲区中正在操作数据的位置。
 * mark : 可以记录当前position的位置，通过reset()恢复到mark的位置
 * 0 <= mark <= position <= limit <= capacity
 *
 * 直接缓冲区与非直接缓冲区
 * 非直接缓冲区: 通过allocate()方法分配缓冲区， 将缓冲区建立在JVM的内存中
 * 直接缓冲区：通过allocateDirect()方法分配直接缓冲区，将缓冲区建立在物理内存中。可以 提高效率
 */
public class BufferTest {
    @Test
    public void test1() {
        ByteBuffer byteBuffer = ByteBuffer.allocate(1024);
        System.out.println(byteBuffer.position());
        System.out.println(byteBuffer.limit());
        System.out.println(byteBuffer.capacity());
    }
}
